package com.timmy.google_play.views;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * Created by Timmy on 2016/12/12.
 * 左右滑动的时候,请求父容器不要拦截事件
 * 上下滑动不做任何处理
 */

public class ChildViewPager extends ViewPager {

    private float mDownX;
    private float mDownY;

    public ChildViewPager(Context context) {
        super(context);
    }

    public ChildViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /*
      1.先执行该方法
      是否分发事件
      返回的含义
          true: 不会来到 onInterceptHoverEvent 该方法
          false: 不会来到 onInterceptHoverEvent 该方法
          super: 默认情况
      一般该方法不作处理
     */
    @Override
    protected boolean dispatchGenericFocusedEvent(MotionEvent event) {
        return super.dispatchGenericFocusedEvent(event);
    }

    /*
      2. 再执行这个方法
      是否拦截该方法
          true: 来到自己的 onTouchEvent 方法       //向下传递
          false: 事件传递给子类
          super: 默认情况
     */
    @Override
    public boolean onInterceptHoverEvent(MotionEvent event) {
        return super.onInterceptHoverEvent(event);
    }

    /*
      3.最后执行此方法
      是否消费
          true: 事件被终止
          false: 事件传递给自己的父容器        //向上传递
          super: 默认情况

       来到 onTouchEvent 方法的几种情况
          1. 自己拦截了事件
          2. 子类没有消费事件
     */
    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mDownX = ev.getRawX();
                mDownY = ev.getRawY();

                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = ev.getRawX();
                float moveY = ev.getRawY();

                int diffX = (int) (moveX - mDownX + 0.5f);
                int diffY = (int) (moveY - mDownY + 0.5f);
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    //水平滚动,请求父容器不要拦截
                    getParent().requestDisallowInterceptTouchEvent(true);
                } else {
                    //垂直滚动
                    getParent().requestDisallowInterceptTouchEvent(false);
                }

                break;
            case MotionEvent.ACTION_UP:

                break;
        }
        return super.onTouchEvent(ev);
    }
}
